////////////////////////////////////////////////////////////////////////////////

#ifndef _PHYSICALOBJECT_H_
#include "physicalobject.h"
#endif

////////////////////////////////////////////////////////////////////////////////


PhysicalObject::PhysicalObject( float _mass,
                                const PE::Shape* _shape,
                                float _resistanceCoeff )
: m_Position(0,0),
  m_Mass(_mass),
  m_ResistanceCoefficient(_resistanceCoeff),
  m_Shape(_shape)
{
    PE::Vector vel = {0,0};
    SetVelocity(vel);
}


////////////////////////////////////////////////////////////////////////////////


PhysicalObject::~PhysicalObject()
{
}


////////////////////////////////////////////////////////////////////////////////


const PE::Point& PhysicalObject::GetPosition() const
{
    return m_Position;
}


////////////////////////////////////////////////////////////////////////////////


const PE::Vector& PhysicalObject::GetVelocity() const
{
    return m_Velocity;
}


////////////////////////////////////////////////////////////////////////////////


double PhysicalObject::GetMass() const
{
    return m_Mass;
}


////////////////////////////////////////////////////////////////////////////////


double PhysicalObject::GetResistanceCoefficient() const
{
    return m_ResistanceCoefficient;
}


////////////////////////////////////////////////////////////////////////////////


const PE::Shape& PhysicalObject::GetShape() const
{
    return *m_Shape;
}


////////////////////////////////////////////////////////////////////////////////


void PhysicalObject::SetPosition(PE::Point _position)
{
    m_Position = _position;
}


////////////////////////////////////////////////////////////////////////////////


void PhysicalObject::SetVelocity( PE::Vector _velocity )
{
    m_Velocity = _velocity;
}


////////////////////////////////////////////////////////////////////////////////


void PhysicalObject::ApplyImpulse(PE::Direction _dir, double _force)
{
    // Calculate new velocity
    m_Velocity.vx += _force * _dir.dx / m_Mass;
    m_Velocity.vy += _force * _dir.dy / m_Mass;
}


////////////////////////////////////////////////////////////////////////////////
